/**
 * 
 */
package com.intelap.fabricaciones;

import javax.persistence.OptimisticLockException;

/**UnitOfWork para entidades desatadas.
 *  @author ggpollit */
public interface UnidadTrabajo {
	void registrarNueva(Entidad<?> entidad);

	void registrarSucia(Entidad<?> entidad);

	void registrarQuitada(Entidad<?> entidad);

	void registrarLeida(Entidad<?> entidad);

	/** Hace las siguientes dos cosas en el orden en que se mencionan: <li>Comete todos los cambios realizados en las {@link Entidad}es que sufrieron cambios durante esta unidad de trabajo después de la última llamada a {@link #cometerYContinuar()} <li>Marca esta unidad de trabajo como terminada; */
	void cometerYTerminar();

	/** Comete todos los cambios realizados en las entidades que sufrieron cambios durante esta unidad de trabajo después de la última llamada a {@link #cometerYContinuar()}.
	 * @throws OptimisticLockException si ha mutado alguna entidad que, según los registros de esta unidad de trabajo, solo fue leida. Si quien ataja esta excepcion es capaz de corregir la situacion o determina que se tolera ignorar la discrepancia, puede volver a llamar a esta operacion para continuar con la sincronización hacia la DB. */
	void cometerYContinuar();
	
	/** Marca esta {@link UnidadTrabajo} como terminada y cierra la conversacion ignorando todos los cambios registrados. */
	void cancelar();
}
